const jwt = require("jsonwebtoken");
const secrect = "yuanjin"; //密钥
const cookieKey = "token"; //cookie的键名

/**
 * @param {res} res 响应内容
 * @param {time} maxAge 有效时间
 * @param {object} info 传入的信息
 */
 exports.publish = function(res,maxAge = 3600*24,info={}){
    // 生成token：通过jwt库的sign方法
    const token = jwt.sign(info,secrect,{
        expiresIn:maxAge,
    })
    // 添加到cookie或其它传输：
    //依赖了cookie-parser第三方库：
    res.cookie(cookieKey,token,{
        maxAge:maxAge*1000,
        path:"/"
    })
    res.header("authorization", token);
}

/**
 * @param {req} req 请求内容
 * @returns 认证结果
 */
 exports.verify = function (req) {
    let token; 
    //尝试从cookie中获取jwt
    token = req.cookies[cookieKey]; 
    if (!token) { //cookie中没有，尝试中header中
      token = req.headers.authorization;
      if (!token) {//没有token
        return null;
      }
      // 带bearer，authorization: bearer token
      // token = token.split(" "); 
      // token = token.length === 1 ? token[0] : token[1];
    }
    try {
      //const result = jwt.decode(token)  //不验证jwt安全直接得到结果
      const result = jwt.verify(token, secrect); //验证jwt再得到结果
      return result;
    } catch(err) {
      return null;
    }
  };